# Copyright (c) 2011 Duncan Fordyce, Jimmy Cao
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
# The above copyright notice and this permission notice shall be included in
#  all copies or substantial portions of the Software.
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.

numeric_events = {
    b"001": "welcome",
    b"002": "yourhost",
    b"003": "created",
    b"004": "myinfo",
    b"005": "featurelist",  # XXX
    b"200": "tracelink",
    b"201": "traceconnecting",
    b"202": "tracehandshake",
    b"203": "traceunknown",
    b"204": "traceoperator",
    b"205": "traceuser",
    b"206": "traceserver",
    b"207": "traceservice",
    b"208": "tracenewtype",
    b"209": "traceclass",
    b"210": "tracereconnect",
    b"211": "statslinkinfo",
    b"212": "statscommands",
    b"213": "statscline",
    b"214": "statsnline",
    b"215": "statsiline",
    b"216": "statskline",
    b"217": "statsqline",
    b"218": "statsyline",
    b"219": "endofstats",
    b"221": "umodeis",
    b"231": "serviceinfo",
    b"232": "endofservices",
    b"233": "service",
    b"234": "servlist",
    b"235": "servlistend",
    b"241": "statslline",
    b"242": "statsuptime",
    b"243": "statsoline",
    b"244": "statshline",
    b"250": "luserconns",
    b"251": "luserclient",
    b"252": "luserop",
    b"253": "luserunknown",
    b"254": "luserchannels",
    b"255": "luserme",
    b"256": "adminme",
    b"257": "adminloc1",
    b"258": "adminloc2",
    b"259": "adminemail",
    b"261": "tracelog",
    b"262": "endoftrace",
    b"263": "tryagain",
    b"265": "n_local",
    b"266": "n_global",
    b"300": "none",
    b"301": "away",
    b"302": "userhost",
    b"303": "ison",
    b"305": "unaway",
    b"306": "nowaway",
    b"311": "whoisuser",
    b"312": "whoisserver",
    b"313": "whoisoperator",
    b"314": "whowasuser",
    b"315": "endofwho",
    b"316": "whoischanop",
    b"317": "whoisidle",
    b"318": "endofwhois",
    b"319": "whoischannels",
    b"321": "liststart",
    b"322": "list",
    b"323": "listend",
    b"324": "channelmodeis",
    b"329": "channelcreate",
    b"331": "notopic",
    b"332": "currenttopic",
    b"333": "topicinfo",
    b"341": "inviting",
    b"342": "summoning",
    b"346": "invitelist",
    b"347": "endofinvitelist",
    b"348": "exceptlist",
    b"349": "endofexceptlist",
    b"351": "version",
    b"352": "whoreply",
    b"353": "namreply",
    b"354": "whospcrpl",
    b"361": "killdone",
    b"362": "closing",
    b"363": "closeend",
    b"364": "links",
    b"365": "endoflinks",
    b"366": "endofnames",
    b"367": "banlist",
    b"368": "endofbanlist",
    b"369": "endofwhowas",
    b"371": "info",
    b"372": "motd",
    b"373": "infostart",
    b"374": "endofinfo",
    b"375": "motdstart",
    b"376": "endofmotd",
    b"377": "motd2",        # 1997-10-16 -- tkil
    b"381": "youreoper",
    b"382": "rehashing",
    b"384": "myportis",
    b"391": "time",
    b"392": "usersstart",
    b"393": "users",
    b"394": "endofusers",
    b"395": "nousers",
    b"396": "event_hosthidden",
    b"401": "nosuchnick",
    b"402": "nosuchserver",
    b"403": "nosuchchannel",
    b"404": "cannotsendtochan",
    b"405": "toomanychannels",
    b"406": "wasnosuchnick",
    b"407": "toomanytargets",
    b"409": "noorigin",
    b"411": "norecipient",
    b"412": "notexttosend",
    b"413": "notoplevel",
    b"414": "wildtoplevel",
    b"421": "unknowncommand",
    b"422": "nomotd",
    b"423": "noadmininfo",
    b"424": "fileerror",
    b"431": "nonicknamegiven",
    b"432": "erroneusnickname", # Thiss iz how its speld in thee RFC.
    b"433": "nicknameinuse",
    b"436": "nickcollision",
    b"437": "unavailresource",  # "Nick temporally unavailable"
    b"441": "usernotinchannel",
    b"442": "notonchannel",
    b"443": "useronchannel",
    b"444": "nologin",
    b"445": "summondisabled",
    b"446": "usersdisabled",
    b"451": "notregistered",
    b"461": "needmoreparams",
    b"462": "alreadyregistered",
    b"463": "nopermforhost",
    b"464": "passwdmismatch",
    b"465": "yourebannedcreep", # I love this one...
    b"466": "youwillbebanned",
    b"467": "keyset",
    b"471": "channelisfull",
    b"472": "unknownmode",
    b"473": "inviteonlychan",
    b"474": "bannedfromchan",
    b"475": "badchannelkey",
    b"476": "badchanmask",
    b"477": "nochanmodes",  # "Channel doesn't support modes"
    b"478": "banlistfull",
    b"481": "noprivileges",
    b"482": "chanoprivsneeded",
    b"483": "cantkillserver",
    b"484": "restricted",   # Connection is restricted
    b"485": "uniqopprivsneeded",
    b"491": "nooperhost",
    b"492": "noservicehost",
    b"501": "umodeunknownflag",
    b"502": "usersdontmatch",
    b"728": "quietlist",
    b"729": "quietlistend"
}

generated_events = [
    # Generated events
    "dcc_connect",
    "dcc_disconnect",
    "dccmsg",
    "disconnect",
    "ctcp",
    "ctcpreply",
]

protocol_events = [
    # IRC protocol events
    "error",
    "join",
    "kick",
    "mode",
    "part",
    "ping",
    "privmsg",
    "privnotice",
    "pubmsg",
    "pubnotice",
    "quit",
    "invite",
    "pong",
]

all_events = generated_events + protocol_events + list(numeric_events.values())

